home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASMVEG4.ZIP / CC.ASM < prev    next >
Assembly Source File  |  1996-12-23  |  4KB  |  136 lines

  1. BEGIN:              JMP INITIALIZE
  2.  
  3. HOURS               DB 0
  4. MINUTES             DB 0
  5. SECONDS             DB 0
  6. OLD_INT_28          DW 0
  7. OLD_INT_28_2        DW 0
  8. VID_SEG             DW 0B800
  9. POINTER             DB 0
  10. SCR_BUFFER          DB '00:00:00 pm'
  11. SCR_LEN             DW $-OFFSET SCR_BUFFER
  12. BUSY                DB 0
  13.  
  14. GET_TIME:           PUSH AX,BX,CX,DX,SI,DI,DS,ES
  15.                     PUSHF
  16.                     CLD
  17.                     PUSH CS
  18.                     POP DS
  19.                     PUSH CS
  20.                     POP ES
  21.                     CMP BUSY,1
  22.                     JNZ PASS_BUSY
  23.                     JMP QUICK_EXIT
  24.  
  25. PASS_BUSY:          MOV BUSY,1
  26.                     MOV AH,02C
  27.                     INT 021
  28.                     MOV HOURS,CH
  29.                     MOV MINUTES,CL
  30.                     MOV SECONDS,DH
  31.                     MOV DI,OFFSET SCR_BUFFER
  32.  
  33. OPT_TIME:           MOV DL,HOURS
  34.                     CMP DL,13
  35.                     JL NOT_PM
  36.                     SUB DL,12
  37.                     MOV POINTER,1
  38.  
  39. NOT_PM:             CMP DL,0
  40.                     JNZ NOT_ZERO_TIME
  41.                     MOV DL,12
  42.                     MOV POINTER,1
  43.  
  44. NOT_ZERO_TIME:      XOR DH,DH
  45.                     CMP DL,10
  46.                     JGE NOT_PAST10
  47.                     MOV AL,' '
  48.                     STOSB
  49.  
  50. NOT_PAST10:         CALL WRITE_DECIMAL
  51.                     MOV AL,':'
  52.                     STOSB
  53.                     MOV DL,MINUTES
  54.                     XOR DH,DH
  55.                     CMP DL,10
  56.                     JGE NOT_10_3
  57.                     MOV AL,'0'
  58.                     STOSB
  59.  
  60. NOT_10_3:           CALL WRITE_DECIMAL
  61.                     MOV AL,':'
  62.                     STOSB
  63.                     MOV DL,SECONDS
  64.                     XOR DH,DH
  65.                     CMP DL,10
  66.                     JGE NOT_10_4
  67.                     MOV AL,'0'
  68.                     STOSB
  69.  
  70. NOT_10_4:           CALL WRITE_DECIMAL
  71.                     MOV AL,' '
  72.                     STOSB
  73.                     MOV AL,'a'
  74.                     CMP POINTER,1
  75.                     JNZ NOT_PTR_1
  76.                     MOV AL,'p'
  77.  
  78. NOT_PTR_1:          STOSB
  79.                     MOV AX,VID_SEG
  80.                     MOV ES,AX                   ; sets up base to write to
  81.                     MOV DI,3978                 ; sets up offset to write to
  82.                     MOV SI,OFFSET SCR_BUFFER    ; sets up location to write from
  83.                     MOV CX,SCR_LEN              ; counter for number of bytes to write (length of scr_buffer)
  84.  
  85. OPT_TIME_SCREEN:    MOVSB
  86.                     MOV AL,0F
  87.                     STOSB
  88.                     LOOP OPT_TIME_SCREEN
  89.                     MOV BUSY,0
  90.  
  91. QUICK_EXIT:         POPF
  92.                     POP ES,DS,DI,SI,DX,CX,BX,AX
  93.                     IRET
  94.  
  95. WRITE_DECIMAL:      PUSH AX
  96.                     PUSH BX
  97.                     PUSH CX
  98.                     PUSH DX
  99.                     MOV AX,DX
  100.                     MOV BX,10
  101.                     XOR CX,CX
  102.  
  103. NEXT_COUNT:         XOR DX,DX
  104.                     DIV BX
  105.                     PUSH DX
  106.                     INC CX
  107.                     OR AX,AX
  108.                     JNZ NEXT_COUNT
  109.  
  110. FLOG_IT_BACK:       POP AX
  111.                     ADD AL,'0'
  112.                     STOSB
  113.                     LOOP FLOG_IT_BACK
  114.                     POP DX
  115.                     POP CX
  116.                     POP BX
  117.                     POP AX
  118.                     RET
  119.  
  120. INITIALIZE:         MOV AH,0F
  121.                     INT 010
  122.                     CMP AL,07
  123.                     JNZ NOT_MONO
  124.                     MOV VID_SEG,0B000
  125.  
  126. NOT_MONO:           MOV AX,03528
  127.                     INT 021
  128.                     MOV OLD_INT_28,BX
  129.                     MOV OLD_INT_28_2,ES
  130.                     MOV AX,02528
  131.                     MOV DX,OFFSET GET_TIME
  132.                     INT 021
  133.                     MOV DX,OFFSET INITIALIZE
  134.                     INT 027
  135.  
  136.